<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台（PHP版）
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码，建议反馈是我们前进的动力
// | 开源版本可自由商用，可去除界面版权logo
// | gitee下载：https://gitee.com/likeshop_gitee/likeadmin
// | github下载：https://github.com/likeshop-github/likeadmin
// | 访问官网：https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------

namespace app\adminapi\lists;


use app\adminapi\lists\BaseAdminDataLists;
use app\common\lists\ListsExcelInterface;
use app\common\lists\ListsExtendInterface;
use app\common\lists\ListsSortInterface;
use app\common\model\TbWorktask;
use app\common\lists\ListsSearchInterface;


/**
 * TbWorktask列表
 * Class TbWorktaskLists
 * @package app\adminapi\lists
 */
class TbWorktaskLists extends BaseAdminDataLists implements ListsExtendInterface, ListsSearchInterface, ListsSortInterface,
                                                            ListsExcelInterface
{
    /**
     * @notes 设置支持排序字段
     * @return string[]
     * @author 段誉
     * @date 2021/12/29 10:07
     * @remark 格式: ['前端传过来的字段名' => '数据库中的字段名'];
     */
    public function setSortFields(): array
    {
        return ['id' => 'id'];
    }


    /**
     * @notes 设置默认排序
     * @return string[]
     * @author 段誉
     * @date 2021/12/29 10:06
     */
    public function setDefaultOrder(): array
    {
        return ['id' => 'desc'];
    }

    public function extend()
    {
        return [];
    }

    /**
     * @notes 设置导出字段
     * @return string[]
     * @author 段誉
     * @date 2021/12/29 10:08
     */
    public function setExcelFields(): array
    {
        $categoryField = [
            '工单号'   => '工单号',
            '工单类型' => '工单类型',
            '分配机构' => '分配机构',
            '分配人员' => '分配人员',
            '快递单号' => '快递单号',
            '产品IMEI' => '产品IMEI',
            '产品品牌' => '产品品牌',
            '产品型号' => '产品型号',
            '产品颜色' => '产品颜色',
            '保修状态' => '保修状态',
            '报修故障' => '报修故障',

            '故障说明'       => '故障说明',
            '报修服务类型'   => '报修服务类型',
            '报修数量'       => '报修数量',
            '用户名称'       => '用户名称',
            '手机号码'       => '手机号码',
            '物料费用'       => '物料费用',
            '服务费'         => '服务费',
            '优惠费用'       => '优惠费用',
            '收费合计'       => '收费合计',
            '发货类型'       => '发货类型',
            '受理日期'       => '受理日期',
            '预计完成时间'   => '预计完成时间',
            '服务单状态'     => '服务单状态',
            '派单价格'       => '派单价格',
            '收货备注1'      => '收货备注1',
            '发货物流费用'   => '发货物流费用',
            '结算状态'       => '结算状态',
            '是否结算'       => '是否结算',
            '结算月份'       => '结算月份',
            '不结算原因'     => '不结算原因',
            '是否保内结算'   => '是否保内结算',
            '是否保外买断'   => '是否保外买断',
            '保内不结算原因' => '保内不结算原因',
            '物流费结算金额' => '物流费结算金额',
            '保内结算金额'   => '保内结算金额',
            '保外结算金额'   => '保外结算金额',
            '其他结算金额'   => '其他结算金额',
            '保外买断金额'   => '保外买断金额',
            '合计结算金额'   => '合计结算金额',
            '结算备注'       => '结算备注',
            '时间'           => '时间',


        ];


        return $categoryField;
    }


    /**
     * @notes 设置导出文件名
     * @return string
     * @author 段誉
     * @date 2021/12/29 10:08
     */
    public function setFileName(): string
    {
        return '碎屏工单';
    }

    /**
     * @notes 设置搜索条件
     * @return \string[][]
     * @author likeadmin
     * @date 2025/03/22 10:01
     */
    public function setSearch(): array
    {
        return [
            '=' => [
                '工单号',
                '工单类型',
                '分配机构',
                '分配人员',
                '快递单号',
                '产品IMEI',
                '产品品牌',
                '产品型号',
                '产品颜色',
                '保修状态',
                '报修故障',
                '故障说明',
                '报修服务类型',
                '报修数量',
                '用户名称',
                '手机号码',
                '物料费用',
                '服务费',
                '优惠费用',
                '收费合计',
                '发货类型',
                '受理日期',
                '预计完成时间',
                '服务单状态',
                '派单价格',
                '收货备注1',
                '发货物流费用',
                '结算状态',
                '是否结算',
                '结算月份',
                '不结算原因',
                '是否保内结算',
                '是否保外买断',
                '保内不结算原因',
                '物流费结算金额',
                '保内结算金额',
                '保外结算金额',
                '其他结算金额',
                '保外买断金额',
                '合计结算金额',
                '结算备注',
                '时间'
            ],
        ];
    }


    /**
     * @notes 获取列表
     * @return array
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     * @author likeadmin
     * @date 2025/03/22 10:01
     */
    public function lists(): array
    {
        return TbWorktask::where($this->searchWhere)
            ->limit($this->limitOffset, $this->limitLength)
            ->order(['id' => 'desc'])
            ->select()
            ->toArray();
    }


    /**
     * @notes 获取数量
     * @return int
     * @author likeadmin
     * @date 2025/03/22 10:01
     */
    public function count(): int
    {
        return TbWorktask::where($this->searchWhere)->count();
    }

}